iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0
Software Development

Redis還在學系列 第 19

Day19 Redis架構實戰-持久化AOF

  • 分享至 

  • xImage
  •  

Redis持久化

Redis持久化模式->AOF

AOF (Append Only File) 異動日誌為將Redis服務所收到的每個操作成功記錄,日誌為RESP協定格式儲存在日誌文字檔.並在每次新增在現有日誌檔的最後面,當日誌檔案過大時,Redis會透過覆寫的方式來持續寫入日誌檔,當Redis服務啟動時會將日誌檔載入來產生記憶體中的資料內容。

  • Redis是先執行操作再將成功記錄寫入aof_buf,再依照fsync策略決定寫入日誌檔。

  • 優點:

    • 資料完整且持續,搭配不同的fsync策略 (關閉fsync、每秒fsync、每次操作fsync),可以兼具效能與完整持續性,最多只會一秒的資料遺失。
    • 因寫入日誌檔是透過持續操作新增在檔案最後,故不需要搜尋時間與擔心資料毀損 (可以透過redis-check-aof aof日誌檔 ,來確認檔案是否有問題,有問題可以加入redis-check-aof --fix aof日誌檔,進行修復)。
    • 當aof日誌檔案過大時,Redis服務會自動使用背景方式覆寫aof檔案。
    • aof日誌檔內容為RESP協定格式儲存,人可以容易閱讀。
  • 缺點:

    • 以相同資料量來比較rdb與aof檔案,aof通常會大於rdb檔案。
    • 依據所使用的fsync策略aof寫入速度可能會較rdb慢,如果關閉fsync,即使是在大量操作時,aof與rdb速度會接近一樣快。
  • AOF設定

https://ithelp.ithome.com.tw/upload/images/20211004/20111658iKvOCan7hg.png

# 目前aof是否有開啟
# 預設
127.0.0.1:6379> config get appendonly
1) "appendonly"
2) "no"

# 目前aof日誌檔案名稱
# 預設
127.0.0.1:6379> config get appendfilename
1) "appendfilename"
2) "appendonly.aof"

# redis.conf
# 開啟aof
appendonly yes

# 指定aof日誌檔名
appendfilename "appendonly.aof"
  • APPENDFSYNC
    • appendfsync always
      • 當操作完成會將日誌寫入aof_buf後,馬上呼叫fsync()將其寫入aof日誌檔案。
      • 如果有大量操作同時發生時,會導致IO衝突。
      • 最慢但最安全
    • appendfsync no
      • 當操作完成會將日誌寫入aof_buf後,等待作業系統決定何時將其寫入aof日誌檔案。
      • Linux預設不會超過30s。
      • 可能會有資料遺失的狀況發生,且無法保證遺失的時間長短區間。
      • 最快最不安全
    • appendfsync everysec
      • 當操作完成會將日誌寫入aof_buf後,會需要等待每秒間距發生時透過執行fsync()將其寫入aof日誌檔案。
      • 可能會有資料遺失的狀況發生,但最多不會超過一秒。
      • 如果有大量操作同時發生時,不會導致IO衝突。
  • 啟動Redis Server時會載入AOF日誌檔

https://ithelp.ithome.com.tw/upload/images/20211004/20111658jLYbOCV7So.png


上一篇
Day18 Redis架構實戰-持久化RDB
下一篇
Day20 Redis架構實戰-持久化RDB+AOF
系列文
Redis還在學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言